// 安装TFT库  bodmer/TFT_eSPI
#include <Arduino.h>
#include<ESP8266WiFi.h>

#include <TFT_eSPI.h>
#include <SPI.h>
// ESP8266默认接线SCK-->D5, SDA-->D7, RES-->D4, DC-->D3
TFT_eSPI tft = TFT_eSPI(240, 240); // 声明TFT对象，240*240

//从ntp服务器更新时间(依赖 ntp 库)
#include <NTPClient.h>
#include <WiFiUdp.h>

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.aliyun.com");


/******************1.以下为资源文件*******************************/
#include "myfont.h"
#include "superman.c"
#include "animation.h"
#include "weather_font16.h"






/******************2.以下为程序可配置项*******************************/
/**wifi 账号和密码*/
const char* ssid     = "dayuan";
const char* password = "19900625";

unsigned long last_ntp = 0;
const long interval_ntp = 1000; //时间的刷新频率（毫秒）



/******************3.以下为各类函数*******************************/
#include "wifi.h"
#include "ntptime.h"


// 导入字模，在屏幕上显示的方法
/**********单个汉字显示***********/
void showMyFont(int32_t x, int32_t y, const char c[3], uint32_t color)
{
  for (int k = 0; k < 25; k++) // 根据字库的字数调节循环的次数
    if (hanzi[k].Index[0] == c[0] && hanzi[k].Index[1] == c[1] && hanzi[k].Index[2] == c[2])
    {
      tft.drawBitmap(x, y, hanzi[k].hz_Id, hanzi[k].hz_width, 16, color);
    }
}
/**********整句汉字显示***********/
void showMyFonts(int32_t x, int32_t y, const char str[], uint32_t color)
{ // 显示整句汉字，字库比较简单，上下、左右输出是在函数内实现
  int x0 = x;
  for (int i = 0; i < strlen(str); i += 3)
  {
    showMyFont(x0, y, str + i, color);
    x0 += 17;
  }
}





/******************4.以下为主程序*******************************/
void setup()
{
  Serial.begin(115200);

  //tft启动
  tft.init();                                   // 初始化
  tft.setRotation(0);                           // 0表示正常角度显示
  tft.fillScreen(TFT_BLACK);                    // 屏幕颜色
  tft.setTextColor(TFT_WHITE, TFT_BLACK, true); // 设置文本颜色
  tft.setTextSize(2);                           // 设置字体大小

  //联网启动
  tft.println("Wi-Fi >> " + String(ssid));            //显示连接的WIFI信息
  initWifi();


  tft.setTextColor(TFT_WHITE, TFT_BLACK, true);
  //对时
  tft.println("Get NTP Time");
  initNtp();


  tft.fillScreen(TFT_BLACK);
}

void loop()
{
  //获取单片机启动至今的毫秒数
  unsigned long currentMillis = millis();

  //update ntp 时间
  if (last_ntp == 0 || currentMillis - last_ntp >= interval_ntp) {

    last_ntp = currentMillis;
    loopNtp();

     tft.loadFont(weather_font16);
    tft.setTextColor(TFT_WHITE, TFT_BLACK, true);
    tft.drawString(dt.localDate + "  " + weekOfDate1(dt.year, dt.month, dt.day) + " " + outputLunarDate(dt.year, dt.month, dt.day), 0, 0);
    // showMyFonts(0, 0, "2025-04-27  星期日  三月三十", TFT_GREENYELLOW);
     tft.unloadFont();

    tft.setTextSize(5);
    tft.setTextColor(TFT_GREEN, TFT_BLACK, true);
    tft.drawString(dt.localTime, 0, 30);
  }


}






















// void setup()
// {
//   Serial.begin(115200);

//   // tft.setTextSize(1);
//   // tft.fillScreen(TFT_BLACK);
//   // tft.setTextColor(TFT_GREEN, TFT_BLACK);
//   // //tft.drawString(" !\"#$%&'()*+,-./0123456", 0, 0, 2);

//   tft.init();                                   // 初始化
//   tft.setRotation(0);                           // 0表示正常角度显示
//   tft.fillScreen(TFT_BLACK);                    // 屏幕颜色
//   tft.setTextColor(TFT_WHITE, TFT_BLACK, true); // 设置文本颜色
//   // tft.println("Wi-Fi >> " + String(ssid));            //显示连接的WIFI信息

//   //showMyFonts(0, 50, "周一二三四五六日月年", TFT_GREENYELLOW);

//   tft.setSwapBytes(true);                        //RGB-->BGR,加上这句才能正确显示颜色
//   tft.pushImage(0,0,240,240,superman);
// }

// void loop()
// {
//   for(int i=0;i<18;i++){
//     tft.pushImage(0,0,60,74,animation[i]);
//     delay(100);
//   }
// }